#include "stdafx.h"
#include <mpir.h>

unsigned int LDF(mpz_t M){
char * M5 = NULL; unsigned int L_1, j, x, z, q, d, C[5] = {0,0,0,0,0}, aN, y;
M5 = mpz_get_str(M5, 5, M); L_1 = strlen(M5) -1; x = 0; q = 0;
for(j=0; j<L_1; j++){ d=M5[j] - (unsigned int)('0'); C[d]++; q = q + d; x += q;}
d = M5[j] - (unsigned int)('0'); C[d]++; z = (x + C[2] + 2*C[4]) % 4;

if(z==0) y = 1; else if(z==1) y = 2; else if(z==2) y = 4; else y = 8; // y = 2^z
aN = 6*(y % 2) + y*(1-(y % 2)); //a(n) = 6(y mod 2) + y(1-(y mod 2)).
delete[] M5; M5 = NULL; return aN;
}

int _tmain(){
mpz_t M; unsigned int n, aN, pow10 = 1;
printf("0 8\n");

mpz_init2(M, 31250001);

for(n=1; n<=9;n++){
	pow10 *= 10;
	mpz_ui_pow_ui(M, 2, pow10);
	aN = LDF(M);
	printf("%u %u\n", n,aN);
	}

printf("\n");
mpz_clear(M); return 0;
}
